Sentry 搭建 参考: https://github.com/hexh250786313/blog/issues/11
Sentry 飞书通知 在 sentry requirements 文件中添加依赖即可,然后重启 sentry
Sentry 迁移 备份 Volume 1 2 3 4 5 6 7 8 9 10 11 12 13 14 for i in "$@"; do echo "开始备份:"$i # 创建 docker run -it -d --name container_back -v $i:/volume alpine >/dev/null 2>&1 # 打包压缩 docker exec -it container_back tar -cjf /image_volume_back.tar.bz2 -C /volume ./ >/dev/null 2>&1 # 打包成一个新的images docker commit -p container_back container_back >/dev/null 2>&1 # 将images导出为文件 docker save -o $i.tar container_back >/dev/null 2>&1 docker stop container_back >/dev/null 2>&1 docker rm container_back >/dev/null 2>&1 echo "完成备份:"$i done
以上内容另存为 back.sh。
查看 docker volume 列表,并备份需要迁移的 volume
1 sh back.sh sentry-clickhouse sentry-data sentry-kafka...
备份镜像 批量导出镜像, 可以执行以下 Python 脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import reimport osimport subprocess if __name__ == "__main__" : p = subprocess.Popen('docker images' , shell=True , stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): m = re.match(r'(^kolla[^\s]*\s*)\s([^\s]*\s)' , line) if not m: continue iname = m.group(1 ).strip() itag = m.group(2 ).strip() if iname.find('/' ): tarname = iname.split('/' )[0 ] + '_' + iname.split('/' )[-1 ] + '_' + itag + '.tar' else : tarname = iname + '_' + itag + '.tar' print tarname ifull = iname + ':' + itag cmd = 'docker save -o ' + tarname + ' ' + ifull print os.system(cmd) retval = p.wait()
或者执行以下 shell 脚本
1 2 3 4 5 6 7 8 9 10 # !/bin/bash docker images > images.txt awk '{print $1}' images.txt > images_cut.txt sed -i '1d' images_cut.txt while read LINE do docker save $LINE > ${LINE//\//_}.train.tar echo ok done < images_cut.txt echo finish
恢复 Volume 1 2 3 4 5 6 7 8 9 10 11 12 13 for i in "$@"; do echo "开始还原:"$i # 建立 Docker Volume docker volume create $i # 还原文件为 Image docker load -i $i.tar # 挂载 Docker Volume之后,透过命令将原先 Image 内的压缩档解压缩到 Docker Volume,完成之后自动删掉 Alpine 的 Container docker run --rm -v $i:/volume container_back sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /image_volume_back.tar.bz2 ;" docker rmi container_back echo "完成还原:"$i done
内容另存为 reduct.sh,并执行
1 sh reduct.sh sentry-clickhouse.tar sentry-data.tar sentry-kafka.tar...
恢复镜像 可以执行以下 python 脚本重新导入镜像
1 2 3 4 5 6 7 import os images = os.listdir(os.getcwd()) for imagename in images: if imagename.endswith('.tar' ): print(imagename) os.system('docker load -i %s' %imagename)
重启服务 启动 sentry docker-compose,并在 sentry 界面中将 根URL 修改为新的即可。
最后验证服务是否正常,查看各个容器日志是否有异常。